Matthias Clasen [Fri, 26 Jun 2020 19:49:39 +0000 (15:49 -0400)]
text: Be more selective when selecting on focus-in
We don't want to select on focus-in when the focus
comes from a child. The case where this does harm
is when you activate copy or paste actions from the
context menu. We close the menu before triggering the
action, and if that causes the text in the entry to
be selected, unexpected things happen, since the action
applies to the current selection.
Fixes: #2869
Matthias Clasen [Fri, 26 Jun 2020 19:27:09 +0000 (15:27 -0400)]
Revert "text: Avoid creating a PangoAttrList we don't need"
This reverts commit
67c26650280ba64ff1c0318be8d848e9563ddb21.
The splicing we do here has the important side-effect
of shifting the preedit attributes to the right position.
Without it, we end up always underlining the first chars
in the entry, regardless where the preedit happens.
Matthias Clasen [Fri, 26 Jun 2020 18:08:35 +0000 (14:08 -0400)]
text: Handle key events in the target phase
This makes sure that we do actual key input right
in the middle between all the capture and bubble
event controllers, and are not dependent on the
ordering of those controllers.
The bug that triggered this change was that the
shortcut for activation (Enter) was getting triggered
before the key input, causing Ctrl-Shift-u hex
to stop working, since it never received the enter
to commit the sequence.
Matthias Clasen [Fri, 26 Jun 2020 18:05:57 +0000 (14:05 -0400)]
widget: Add a debug message for consumed key events
Run the application with GTK_DEBUG=keybindings to
get some hints where key events get lost.
Matthias Clasen [Fri, 26 Jun 2020 18:05:28 +0000 (14:05 -0400)]
text: Give names to event controllers
It helps with debugging.
Matthias Clasen [Fri, 26 Jun 2020 17:08:09 +0000 (17:08 +0000)]
Merge branch 'wip/carlosg/sequence-state-fixups' into 'master'
Fixups to gesture sequence states
Closes #2895
See merge request GNOME/gtk!2154
Carlos Garnacho [Fri, 26 Jun 2020 15:36:37 +0000 (17:36 +0200)]
gtktext: Don't accept (twice!) all press actions
The gesture should claim the sequence after triggering uncancellable
actions, like pasting, showing a menu or selecting words/lines. A
single first button press initiating a drag does not trigger
anything yet, so it should avoid claiming the sequence.
Carlos Garnacho [Fri, 26 Jun 2020 15:35:05 +0000 (17:35 +0200)]
gtkswitch: Don't be eager in accepting the gesture
The gesture should be accepted whenever it triggers uncancellable
actions in the widget. This means it should be accepted if the
click does result in toggling the switch.
This leaves the pan gesture room to handle dragging the handle.
Fixes: https://gitlab.gnome.org/GNOME/gtk/-/issues/2895
Matthias Clasen [Fri, 26 Jun 2020 14:31:20 +0000 (14:31 +0000)]
Merge branch 'matthiasc/for-master' into 'master'
main: Avoid a warning
Closes #2894
See merge request GNOME/gtk!2153
Matthias Clasen [Fri, 26 Jun 2020 13:05:56 +0000 (09:05 -0400)]
docs: Some tweaks to the list widget overview
Matthias Clasen [Fri, 26 Jun 2020 12:43:49 +0000 (12:43 +0000)]
Merge branch 'wip/otte/bitset' into 'master'
Improve selection handling API for rubberbanding
See merge request GNOME/gtk!2086
Matthias Clasen [Fri, 26 Jun 2020 12:19:32 +0000 (08:19 -0400)]
main: Avoid a warning
transient-for relationships only exist between
windows, so check that both candidates are such.
Fixes: #2894
Emmanuele Bassi [Fri, 26 Jun 2020 08:48:51 +0000 (08:48 +0000)]
Merge branch 'tintou/dropdown-annotations' into 'master'
dropdown: Annotate the get_selected_item method
See merge request GNOME/gtk!2152
Emmanuele Bassi [Fri, 26 Jun 2020 08:46:35 +0000 (08:46 +0000)]
Merge branch 'wip/ricotz/annotations' into 'master'
gtk: Add some g-i annotations to GtkStringList
See merge request GNOME/gtk!2150
Corentin Noël [Fri, 26 Jun 2020 07:59:12 +0000 (09:59 +0200)]
dropdown: Annotate the get_selected_item method
We need to specify the type as we already know that it is at least a GObject and in case of no selection, NULL is returned.
Benjamin Otte [Fri, 26 Jun 2020 02:07:35 +0000 (04:07 +0200)]
listbase: Make rubberbanding a threshold drag
Benjamin Otte [Fri, 26 Jun 2020 01:26:11 +0000 (03:26 +0200)]
listbase: Only compute the modifiers when releasing the rubberband
... and do the right things:
nothing: selection = rubberband
ctrl: selection = selection OR rubberband
shift: selection = selection AND (NOT rubberband)
ctrl+shift: selection = selection XOR rubberband
(not sure this one makes sense, but toggling is fun)
Benjamin Otte [Fri, 26 Jun 2020 00:56:38 +0000 (02:56 +0200)]
listbase: Compute rubberband region on-demand
Instead of storing the active items as we go, compute the affected items
whenever the rubberband changes and in particular when the rubberband
ends.
That way, the rubberband is guaranteed to select a rectangle even
after scrolling very far.
This is achieved by having a get_items_in_rect() vfunc that selects all
the items in the rubberbanded rectangle and returns them as a bitset.
Benjamin Otte [Fri, 26 Jun 2020 00:55:53 +0000 (02:55 +0200)]
listview: Allocate rubberband at end of size_allocate()
Otherwise the rubberband uses the wrong scroll offsets.
Benjamin Otte [Wed, 24 Jun 2020 03:52:35 +0000 (05:52 +0200)]
listbase: Flip autoscroll deltas if adjustments are flipped
Fixes autoscroll on RTL languages.
Benjamin Otte [Wed, 24 Jun 2020 03:42:38 +0000 (05:42 +0200)]
listbase: Allocate gridview items properly on RTL
We need to flip the items.
Benjamin Otte [Wed, 24 Jun 2020 03:25:28 +0000 (05:25 +0200)]
multiselection: Implement get_selection_in_range()
Benjamin Otte [Wed, 24 Jun 2020 03:02:04 +0000 (05:02 +0200)]
listbase: Allocate rubberband according to list coords
The rubberband is now handled on the list coordinate system.
When starting the rubberband, we track the item under the pointer and
follow it when it is moving.
This may lead to the rubberband start position changing position and
while this may be confusing, it alerts users to the fact that something
crazy is going on.
Benjamin Otte [Wed, 24 Jun 2020 02:49:21 +0000 (04:49 +0200)]
listbase: Move a common function from the children into GtkListBase
We want to use it for the rubberband later.
Benjamin Otte [Wed, 24 Jun 2020 02:46:53 +0000 (04:46 +0200)]
listbase: Don't do extra work
Scrolling causes a queue_resize() which will update the rubberband in
size_allocate() and queue a draw.
Benjamin Otte [Sun, 21 Jun 2020 21:01:36 +0000 (23:01 +0200)]
Fix indentation
Benjamin Otte [Sun, 21 Jun 2020 16:03:25 +0000 (18:03 +0200)]
gtk: Remove GtkPropertySelection
GtkMultiSelection is so much faster than this that it isn't needed.
Benjamin Otte [Sun, 21 Jun 2020 16:00:11 +0000 (18:00 +0200)]
gtk-demo: Port listview-colors demo to multiselection again
Benjamin Otte [Sun, 21 Jun 2020 15:58:27 +0000 (17:58 +0200)]
multiselection: Track items across resorts
In particular, track which items remain in ::items-changed
signal emissions.
But the main use case is sorting, which causes items-changed(0, n, n)
to be emitted.
Benjamin Otte [Sun, 14 Jun 2020 05:08:44 +0000 (07:08 +0200)]
Remove GtkSet
It's been superceded by GtkBitset.
Benjamin Otte [Sun, 14 Jun 2020 05:07:30 +0000 (07:07 +0200)]
selectionmodel: Remove select_callback() functions
gtk_selection_model_set_selection() takes care of those now.
Benjamin Otte [Sun, 14 Jun 2020 04:50:22 +0000 (06:50 +0200)]
listbase: Port rubberband to gtk_selection_model_set_selection()
Benjamin Otte [Sun, 14 Jun 2020 04:41:05 +0000 (06:41 +0200)]
selectionmodel: Add gtk_selection_model_set_selection()
Also port the testsuite.
Benjamin Otte [Sun, 14 Jun 2020 03:30:06 +0000 (05:30 +0200)]
selectionmodel: Replace query_range() with get_selection()
Benjamin Otte [Sat, 13 Jun 2020 03:27:34 +0000 (05:27 +0200)]
multiselection: Port to GtkBitset
Benjamin Otte [Sat, 13 Jun 2020 03:05:30 +0000 (05:05 +0200)]
testsuite: Add tests for GtkBitset
Benjamin Otte [Wed, 10 Jun 2020 06:14:02 +0000 (08:14 +0200)]
Add GtkBitset
Rico Tzschichholz [Thu, 25 Jun 2020 21:10:37 +0000 (23:10 +0200)]
gtk: Add some g-i annotations to GtkStringList
Benjamin Otte [Wed, 10 Jun 2020 05:39:25 +0000 (07:39 +0200)]
Add amalgamated roaring bitmaps source code
Taken from https://github.com/RoaringBitmap/CRoaring and fixed to
not spew warnings.
Matthias Clasen [Thu, 25 Jun 2020 22:28:07 +0000 (22:28 +0000)]
Merge branch 'matthiasc/for-master' into 'master'
Matthiasc/for master
See merge request GNOME/gtk!2149
Matthias Clasen [Thu, 25 Jun 2020 20:40:54 +0000 (16:40 -0400)]
inspector: Adapt to dropdown api change
The suppported syntax for dropdowns in ui files
has changed. Get with the program.
Matthias Clasen [Thu, 25 Jun 2020 18:29:24 +0000 (14:29 -0400)]
docs: Fix a typo
Matthias Clasen [Thu, 25 Jun 2020 18:28:29 +0000 (14:28 -0400)]
gtk-demo: Fix a typo in the listbox demo
Matthias Clasen [Thu, 25 Jun 2020 18:14:33 +0000 (14:14 -0400)]
searchentry: Update the docs slightly
Update the docs to get closer to describing reality.
Matthias Clasen [Thu, 25 Jun 2020 12:03:10 +0000 (08:03 -0400)]
Drop unused includes
Don't include gtkfilechooserentry.h where it
isn't used.
Matthias Clasen [Thu, 25 Jun 2020 02:08:09 +0000 (22:08 -0400)]
stringfilter: Fix a typo
Emin Tufan Çetin [Thu, 25 Jun 2020 01:05:12 +0000 (01:05 +0000)]
Update Turkish translation
Matthias Clasen [Wed, 24 Jun 2020 21:32:30 +0000 (21:32 +0000)]
Merge branch 'wip/carlosg/input-cleanups' into 'master'
Some input cleanups
Closes #2851
See merge request GNOME/gtk!2147
Matthias Clasen [Wed, 24 Jun 2020 19:58:03 +0000 (19:58 +0000)]
Merge branch 'scrolled-window-api' into 'master'
scrolledwindow: Don't take adjustments in new()
See merge request GNOME/gtk!2146
Matthias Clasen [Wed, 24 Jun 2020 19:50:37 +0000 (19:50 +0000)]
Merge branch 'matthiasc/for-master' into 'master'
Matthiasc/for master
See merge request GNOME/gtk!2145
Carlos Garnacho [Wed, 24 Jun 2020 18:19:03 +0000 (20:19 +0200)]
gtktextview: Remove child textview items last
The function tries to go through every child, so it's convenient
to remove all internal ones first.
Carlos Garnacho [Wed, 24 Jun 2020 15:31:03 +0000 (17:31 +0200)]
gtkwidget: Drop _gtk_widget_[gs]et_shadowed()
This API is meaningless now, with grab-notify being handled internally.
Carlos Garnacho [Wed, 24 Jun 2020 16:24:12 +0000 (18:24 +0200)]
gtkwidget: Avoid use of shadowed flag
This is going away, look up whether there is a grab, and whether
the widget is within it, instead.
Carlos Garnacho [Wed, 24 Jun 2020 15:25:34 +0000 (17:25 +0200)]
gtkwidget: Drop gtk_widget_device_is_shadowed()
A widget no longer needs updating on GTK grabs on itself, drop
this miscellaneous and no longer used API.
Carlos Garnacho [Wed, 24 Jun 2020 15:23:11 +0000 (17:23 +0200)]
gtkwidget: Drop internal checks in grab-notify
There's no need to check if the widget is already shadowed, we
implicitly have that from the signal argument.
Carlos Garnacho [Wed, 24 Jun 2020 15:19:57 +0000 (17:19 +0200)]
gtkmain: Make grab-notify notifications more targeted
We only want to send grab-notify to widgets that might have been
interacting with devices via events. Instead of going through all
widgets in all toplevels, we have the window/pointer focus information,
so we can just traverse the widget stacks for every involved foci.
Carlos Garnacho [Wed, 24 Jun 2020 13:40:05 +0000 (15:40 +0200)]
gtkwidget: Drop ::grab-notify signal and vfunc
We don't expect widgets to react directly to these anymore.
Internally we still reset the controllers.
Carlos Garnacho [Wed, 24 Jun 2020 13:37:11 +0000 (15:37 +0200)]
gtkprintoperation-win32: Don't track grab-notify
Further grabs could presumably only come from events handled within
the dialog itself. It seems overeager to do this.
Carlos Garnacho [Wed, 24 Jun 2020 13:35:16 +0000 (15:35 +0200)]
gtkvideo: Track child focus to determine whether controls should autohide
Move away from grab_notify, and use the set_child_focus() vfunc to track
child widgets being set the keyboard focus. This is not 1:1, but seems
good enough at the moment.
Carlos Garnacho [Wed, 24 Jun 2020 12:17:15 +0000 (14:17 +0200)]
gtkbutton: Drop grab_notify handler
The click gesture already has a ::cancel handler, and does almost
everything it should. Move the last bits and remove the grab_notify
handler.
Carlos Garnacho [Wed, 24 Jun 2020 12:12:01 +0000 (14:12 +0200)]
gtkspinbutton: Drop grab_notify handler
The press gesture on the buttons already has a ::cancel handler,
this is redundant.
Carlos Garnacho [Wed, 24 Jun 2020 12:10:42 +0000 (14:10 +0200)]
gtknotebook: Move away from grab_notify
Connect to ::cancel on the relevant gesture instead.
Matthias Clasen [Wed, 24 Jun 2020 18:06:50 +0000 (14:06 -0400)]
testgtk: Update list of cursor names
Use the standard names, since that is what we want
everybody else to use too.
Matthias Clasen [Wed, 24 Jun 2020 17:01:34 +0000 (13:01 -0400)]
Install gtkstringlist.h
Matthias Clasen [Wed, 24 Jun 2020 04:26:27 +0000 (00:26 -0400)]
entrycompletion: Various fixes
Fix various issues that prevented inline completion
and inline selection from working reliably. We were
passing byte counts to gtk_editable_select_region in
one place, but that function expects char counts.
We were listening for GtkEditable::insert-text on
the GtkText widget, but that does not emit those signals,
so listen for GtkEntryBuffer::inserted-text instead.
Finally, we were not clearing the stored completion_prefix
enough, leading to situations where the stored prefix
does not match the text in the entry anymore.
Matthias Clasen [Wed, 24 Jun 2020 04:27:21 +0000 (00:27 -0400)]
gtk-demo: Enable inline completion
Enable inline completion in the entry completion
demo, to have some code exercising this feature.
It is broken.
Matthias Clasen [Wed, 24 Jun 2020 02:39:16 +0000 (22:39 -0400)]
gtk-demo: Improve the entry completion demo
Add more strings.
Matthias Clasen [Wed, 24 Jun 2020 15:25:09 +0000 (11:25 -0400)]
scrolledwindow: Don't take adjustments in new()
In 99.9% of all cases, these are just NULL, NULL.
So just do away with these arguments, people can
use the setters for the rare cases where they want
the scrolled window to use a different adjustment.
Carlos Garnacho [Wed, 24 Jun 2020 11:41:28 +0000 (13:41 +0200)]
gtkwindowhandle: Drop has-grab checks
While it's worth thinking about bringing the "windows can be dragged
with open popovers" behavior back, this does not kick in anymore, nor
should be the way to handle this given all the autoclose surface
semantic changes.
Carlos Garnacho [Wed, 24 Jun 2020 09:20:15 +0000 (11:20 +0200)]
gdk: Drop gdk_device_get_last_event_surface()
This kind of transient state sets the expectative that events update
devices, while it's more accurate to say that devices generate events.
It does not make to expose this function anymore.
Carlos Garnacho [Wed, 24 Jun 2020 09:14:52 +0000 (11:14 +0200)]
gtkwidget: Avoid poking surfaces and events in gtk_widget_list_devices()
This got stuck in ancient times when widgets were windowed, so the devices
in a window to know the devices in that widget would pan out. We do only
want here the devices that are inside the widget, not spread over the
surface, so rewrite this helper function to poke the toplevel foci, and
look they are contained inside the widget.
Carlos Garnacho [Tue, 23 Jun 2020 10:19:20 +0000 (12:19 +0200)]
gtkwidget: Drop _gtk_widget_get_device_surface()
A widget cannot have multiple surfaces anymore, nor needs to
fetch the last event surface as it ought to handle its own.
Carlos Garnacho [Tue, 23 Jun 2020 10:15:00 +0000 (12:15 +0200)]
gtkmain: Drop unused struct field
Grabs are, ironically, not about devices anymore. This struct field
is never set.
Carlos Garnacho [Tue, 23 Jun 2020 09:15:04 +0000 (11:15 +0200)]
gtkwidget: Remove dead code
This variable got unused over time.
Carlos Garnacho [Tue, 23 Jun 2020 09:00:46 +0000 (11:00 +0200)]
gdk: Depend less on gdk_event_get_device()
For the most part, we are interested in seats here.
Carlos Garnacho [Mon, 22 Jun 2020 23:14:53 +0000 (01:14 +0200)]
gdk: Add gdk_event_get_seat()
It currently fetches the seat from the event device, will be changed
in future commits.
Carlos Garnacho [Mon, 22 Jun 2020 22:24:12 +0000 (00:24 +0200)]
gdk: Drop gdk_seat_get_logical_pointers()
Events come from hardware devices and are handled by controllers,
there's no need to use logical pointers, nor to peek them. Drop this
unused API.
Carlos Garnacho [Mon, 22 Jun 2020 21:54:46 +0000 (23:54 +0200)]
gdk: Drop GdkGrabOwnership
We no longer expose such low level tweaks, this is essentially
unused.
Carlos Garnacho [Mon, 22 Jun 2020 21:34:34 +0000 (23:34 +0200)]
gdk: Drop supports_multidevice API
Crossing events are now detached from widget state, all tricky consequences
from getting multiple crossing events are now somewhat moot. Resort to sending
all generated crossing events, and drop this barely (ever?) used API.
Carlos Garnacho [Mon, 22 Jun 2020 21:19:35 +0000 (23:19 +0200)]
gdk: Drop GDK_SOURCE_ERASER
All tools come from devices with GDK_SOURCE_PEN.
Carlos Garnacho [Mon, 22 Jun 2020 13:31:36 +0000 (15:31 +0200)]
gtkmain: Look up transient-for hierarchies to determine modality
Windows that are not modal, but are transient-for a modal window should
still be able to receive and handle events. Inspect the window hierarchy
in those cases, so these windows are handled just like widgets within
the modal dialog.
Fixes: https://gitlab.gnome.org/GNOME/gtk/-/issues/2851
Related: https://gitlab.gnome.org/GNOME/gtk/-/issues/2850
Carlos Garnacho [Fri, 19 Jun 2020 16:50:51 +0000 (18:50 +0200)]
gtkwidget: Cancel all gestures in other groups
When a gesture (group) claims a sequence, all other gesture groups
in the same widget should get cancelled. Not just previously claimed
ones, that shouldn't happen actually.
Matthias Clasen [Tue, 23 Jun 2020 20:43:49 +0000 (20:43 +0000)]
Merge branch 'stringlist' into 'master'
add a public stringlist api
See merge request GNOME/gtk!2134
Matthias Clasen [Sun, 21 Jun 2020 22:00:29 +0000 (18:00 -0400)]
Add GtkStringList as public api
This is a list model holding strings, initialized
from a char **. String lists are buildable as well,
and that replaces the buildable support in GktDropDowns.
Matthias Clasen [Tue, 23 Jun 2020 19:12:52 +0000 (19:12 +0000)]
Merge branch 'wip/jimmac/notebook-legibility' into 'master'
Adwaita: notebook legibility fixes
Closes #2652
See merge request GNOME/gtk!2142
Matthias Clasen [Tue, 23 Jun 2020 19:10:54 +0000 (19:10 +0000)]
Merge branch 'matthiasc/for-master' into 'master'
Matthiasc/for master
See merge request GNOME/gtk!2141
Jakub Steiner [Tue, 23 Jun 2020 17:54:54 +0000 (19:54 +0200)]
Adwaita: notebook legibility fixes
- make inactive tabs more legible
Fixes https://gitlab.gnome.org/GNOME/gtk/-/issues/2652
Matthias Clasen [Sun, 21 Jun 2020 22:03:39 +0000 (18:03 -0400)]
Add a few missing includes
These sources are using GtkListStore apis,
but were replying on indirect includes to
get the header. Make this explicit, to prepare
for GtkEntryCompletion losing its tree view
dependencies.
Matthias Clasen [Sun, 21 Jun 2020 19:28:56 +0000 (15:28 -0400)]
entry completion: Drop the Private struct
This is in preparation for porting GtkEntryCompletion
to use GtkListView.
Ray Strode [Tue, 23 Jun 2020 09:53:35 +0000 (09:53 +0000)]
Merge branch 'wip/fencing-without-context-is-discouraged' into 'master'
x11: Ensure bound context is compatible with sync fence
See merge request GNOME/gtk!2139
Ray Strode [Mon, 22 Jun 2020 21:13:54 +0000 (17:13 -0400)]
x11: Ensure bound context is compatible with sync fence
Commit
a0f6ff101e781aaf0a931be6e22f2885f4f69e04 made sure that a
context was bound before calling glClientWaitSync, but it doesn't
check that the context shares objects with the context that created
the fence.
This commit does a little more validation before deciding the current
context is good enough.
Matthias Clasen [Mon, 22 Jun 2020 23:01:11 +0000 (23:01 +0000)]
Merge branch 'wip/fencing-without-context-is-discouraged' into 'master'
x11: ensure some context is bound before calling glClientWaitSync
See merge request GNOME/gtk!2138
Matthias Clasen [Mon, 22 Jun 2020 22:59:17 +0000 (22:59 +0000)]
Merge branch 'drop-entry-completion-actions' into 'master'
entrycompletion: Drop action support
See merge request GNOME/gtk!2136
Matthias Clasen [Mon, 22 Jun 2020 22:13:30 +0000 (22:13 +0000)]
Merge branch 'matthiasc/for-master' into 'master'
Add a basic clipboard test
See merge request GNOME/gtk!2137
Ray Strode [Mon, 22 Jun 2020 21:13:54 +0000 (17:13 -0400)]
x11: ensure some context is bound before calling glClientWaitSync
Since commit
972134abe48a4c9c7b6ad41b0723f30f4e7ae16b we now call
glClientWaitSync for the vendor nvidia driver, to know when a frame
is ready for the compositor to process.
glClientWaitSync can be called regardless of which context is currently
bound, but if no context is bound at all, it returns 0 without
doing anything.
This commit checks for that edge case, and ensures a context gets
made current in the event no context is already current, before calling
glClientWaitSync.
Matthias Clasen [Mon, 22 Jun 2020 20:36:22 +0000 (16:36 -0400)]
Add a basic clipboard test
This is not reproducing the failure I'm after, unfortunately.
Matthias Clasen [Mon, 22 Jun 2020 18:12:45 +0000 (14:12 -0400)]
entrycompletion: Drop action support
This api has not really been kept up with current
user experiences in popups, and we're better off
just dropping it and letting people do their own
popups if they need custom UI.
Matthias Clasen [Mon, 22 Jun 2020 18:13:25 +0000 (18:13 +0000)]
Merge branch 'keyval-to-uni-fix' into 'master'
gdk: Make gdk_keyval_to_unicode platform-independent
See merge request GNOME/gtk!2132
Matthias Clasen [Mon, 22 Jun 2020 17:56:43 +0000 (17:56 +0000)]
Merge branch 'fix-entry-completion' into 'master'
Fix entry completion
See merge request GNOME/gtk!2135
Matthias Clasen [Mon, 22 Jun 2020 17:24:34 +0000 (13:24 -0400)]
gdk: Clarify the docs of gdk_keyval_to_unicode
Explicitly state that the conversion does not
take locale into account, and point out GDK_KEY_KP_Decimal
as a candidate for special-casing.